<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax图片上传</title>
</head>
<body>
<form action="imageUpload" method="post" enctype="multipart/form-data">
    <input type="file" name="fileName" id="filename" accept="image/png, image/jpeg, image/jpg" onchange="checkImage()">
    <input type="button" id="submitBtn" onclick="checkSubmit()" value="上传"/>
</form>
<div id="showImage"></div>
<div id="onLoadImage"></div>
</body>
<script src="/webjars/jquery/3.3.1/jquery.min.js"></script>
<script src="/webjars/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script type="text/javascript">

    //检查图片
    function checkImage() {
        var fileName=$("#filename").val();
        fileName=fileName.replace("C:\\fakepath\\","");
        var flag=true;
        if(fileName==""){
            flag=false;
            alert("请选择图片");
        }
        else{
            var size = $("#filename")[0].files[0].size;
            if(size/1000>100){
                flag=false;
                alert("图片大小不能超过100KB");
            }
        }
        if(flag){
            onLoadImage();
        }
        else{//清除input type=file的显示内容
            $("#filename").val("");
        }
        return flag;
    }

    //预览图片
    function onLoadImage() {
        var file=$('#filename').get(0).files[0];
        var reader = new FileReader();
        //将文件以Data URL形式读入页面
        reader.readAsDataURL(file);
        reader.onload=function(e){
            //显示文件
            $("#onLoadImage").html('<img src="' + this.result +'" alt="" />');
        }
    }

    /*上传图片
   详细参考链接：https://www.cnblogs.com/qiumingcheng/p/6854933.html
   1.processData设置为false。因为data值是FormData对象，不需要对数据做处理。
   2.<form>标签添加enctype="multipart/form-data"属性。
   3.cache设置为false，上传文件不需要缓存。
   4.contentType设置为false，不设置contentType值，因为是由<form>表单构造的FormData对象，且已经声明了属性enctype="multipart/form-data"，所以这里设置为false。
   */
    function checkSubmit() {
        var formdata=new FormData();
        formdata.append('fileName',$('#filename').get(0).files[0]);
        $.ajax({
            async: false,
            type: 'POST',
            url: "/imageUpload",
            dataType: 'json',
            data: formdata,
            contentType:false,//ajax上传图片需要添加
            processData:false,//ajax上传图片需要添加
            success: function (data) {
                if(data.hasOwnProperty("relativePath")){
                    $("#showImage").html("<img src='"+data.relativePath+"'/>");
                }
                else {
                    $("#showImage").html("上传失败");
                }
                alert(data.result_msg);
            },
            error: function (e) {
                alert("error");
            }
        })
    }
</script>
</html>